Tutorial Membuat Soft Delete

Posted on 16 August 2024


Sebelum ke Tutorialnya saya akan menjelaskan sedikit apaitu Soft Delete.


Soft delete adalah teknik untuk menghapus data dari database tanpa benar-benar menghapusnya secara fisik. Sebaliknya, data yang dihapus ditandai sebagai "dihapus" dengan menambahkan timestamp pada kolom khusus, biasanya bernama deleted_at. Ini memungkinkan Anda untuk mengembalikan data tersebut jika diperlukan di masa depan atau jika terjadi kesalahan.


Untuk menerapkan soft delete pada tabel yang sudah ada di Laravel, ikuti langkah-langkah berikut:


  • Tambahkan Kolom deleted_at pada Tabel:


Pertama, tambahkan kolom deleted_at pada tabel yang ingin Anda terapkan soft delete. Anda bisa membuat migration baru untuk menambah kolom ini:

php artisan make:migration add_deleted_at_to_table_name --table=table_name

Kemudian, edit file migration yang baru dibuat, misalnya add_deleted_at_to_table_name.php, untuk menambahkan kolom deleted_at:

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->timestamp('deleted_at')->nullable();
    });
}
public function down()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->dropColumn('deleted_at');
    });
}

Jalankan migration untuk memperbarui tabel:

php artisan migrate
  •  Gunakan Trait SoftDeletes pada Model:

Tambahkan trait SoftDeletes pada model yang bersangkutan. Misalnya, jika model Anda bernama Matakuliah, edit model tersebut untuk menggunakan trait SoftDeletes:

namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Matakuliah extends Model
{
    use SoftDeletes;
    protected $dates = ['deleted_at']; // Menentukan kolom soft delete
}
  •  Update Query untuk Mengakomodasi Soft Delete:

Dengan soft delete, query Eloquent Anda secara otomatis akan mengecualikan record yang telah dihapus dari hasil query. Anda tidak perlu membuat perubahan khusus pada query biasa Anda, tetapi jika Anda ingin mengambil semua record termasuk yang dihapus, Anda bisa menggunakan metode withTrashed():

$mataKuliah = MataKuliah::withTrashed()->get(); // Mengambil semua data, termasuk yang dihapus
Untuk mengambil hanya record yang dihapus, gunakan onlyTrashed():

$deletedMataKuliah = MataKuliah::onlyTrashed()->get(); // Mengambil hanya data yang dihapus

  • Hapus data secara Soft Delete:
Gunakan metode delete() untuk menghapus record secara soft delete:

$mataKuliah = MataKuliah::find($id);
$mataKuliah->delete(); // Ini akan mengisi kolom deleted_at
  • Restore Data yang Dihapus:
    Untuk mengembalikan record yang telah dihapus, gunakan metode restore():
$mataKuliah = MataKuliah::onlyTrashed()->find($id);
$mataKuliah->restore(); // Ini akan menghapus nilai kolom deleted_at
  • Hapus Data Secara Permanen:
Jika Anda ingin menghapus data secara permanen, Anda bisa menggunakan metode forceDelete():

$mataKuliah = MataKuliah::onlyTrashed()->find($id);
$mataKuliah->forceDelete(); // Ini akan menghapus record dari database secara permanen

Cara Kerja Soft Delete:

  1. Penandaan Data sebagai Dihapus: Saat Anda melakukan soft delete, kolom khusus seperti deleted_at diisi dengan timestamp saat data dihapus. Data tetap ada di database tetapi dianggap sudah dihapus oleh aplikasi.

  2. Query Data: Ketika Anda melakukan query pada tabel, data yang dihapus tidak akan muncul dalam hasil query secara default. Laravel, misalnya, secara otomatis mengecualikan data dengan nilai deleted_at yang tidak null dari hasil query menggunakan Eloquent ORM.

  3. Mengembalikan Data yang Dihapus: Data yang dihapus dapat dipulihkan dengan menghapus nilai dari kolom deleted_at. Ini memungkinkan Anda untuk "mengembalikan" data yang sebelumnya dianggap dihapus.

  4. Menghapus Data Secara Permanen: Jika Anda ingin benar-benar menghapus data secara permanen, Anda dapat menggunakan metode khusus untuk menghapus data yang sudah ditandai sebagai dihapus.


Dengan mengikuti langkah-langkah ini, Anda dapat menerapkan soft delete pada tabel yang sudah ada di Laravel dan mengelola data yang dihapus dengan cara yang lebih aman dan terstruktur.